#第四章 python函数
#声明函数
#语句格式
# def <函数名> (参数列表)：
#    <函数语句>
#    return <返回值>

#实例
# def shi():
#     print("至今思项羽，不肯过江东。")
# shi()

# #声明函数
# def add():
#     a = 3
#     b = 5
#     s = a + b
#     print(s)
#     return a #只是有返回值，没有显示
#
# #调用函数
# c = add()
# print(c)

#函数的参数传递
# #第一组
# def add(a,b):  # a,b为形参
#     print(a + b)
# add(1,3)  # 实参为常量
#
# #第二组
# a = 1
# b = 3
# add(a,b)   # 实参为变量
#
# #第三组
# add(2*3,4*5)   # 实参为表达式
#
# #第四组
# c = 3
# add(8, c * 3)   # 实参为常量、变量和表达式组合

#位置参数示例：
# def score(a,b,c):
#     print('张三成绩为：',a)
#     print('李四成绩为：',b)
#     print('王五成绩为：',c)
#
# score(85, 92, 60)

#有默认值的参数：
# def reg(name,age,sex="女"):
#     print('姓名：{}年龄：{}性别：{}'.format(name,age,sex))
#
#
# reg('张三',20)
# reg('李四',21,'男')

#按照形参名称进行传值
# def fav(*fru):
#     print("我喜欢的水果有：")
#     for i in fru:
#         print(i)
#
#
# fav('苹果')
# fav('苹果','梨子','香蕉')
# fav('西瓜','芒果','哈密瓜','火龙果','草莓','榴莲')

# #参数的值大于等于2，如果声明函数的时候有其他参数，通常会把可变参数放在最后
# def show(a,b,*c):
#     print(a)
#     print(b)
#     print(*c)
#
# show(1,2,4,5,6,7,9,56)

#求任意矩形面积和周长
# def rectangle():
#     a = int(input('请输入矩形的长:'))
#     b = int(input('请输入矩形的宽:'))
#     s = a*b
#     c = 2*(a+b)
#     print('该矩形的面积为:',s)
#     print('该矩形的周长为:',c)
# rectangle()

#return语句在函数中的作用
# def add(a,b):
#     c = a+b
#     return c, a, b, a*b, a-b
#
#
# d = add(1,2)
# print(d)

#变量的作用域
# def fun():
#     a = 20
#     return a
# a = 10
# print(a)
# print(fun())

#
# def pro(*a):
#     for i in a:
#     if i %2 == 0:
#         print('该数据是偶数',a)
#     if i > 10:
#         print('该数据大于10')
# pro(1,2,4,6,8,20,30,60,40)

# 11/12
#递归函数
#通过递归实现100的阶乘
# def fac(n):                   #定义阶乘函数
#     if n <= 1:
#         return 1
#     else:
#         return (n*fac(n-1))   #调用了函数本身
# num = int(input('请输入一个正整数：'))
# s = fac(num)
# print(num,'的阶乘是',s)

#利用递归计算1~100相加之和
# def sum(n):
#     if n == 1:
#         return 1
#     else:
#         return (n+sum(n-1))
# print('1~100相加的和为',sum(100))

#用递归函数计算斐波那契数列
# def fibo(n):
#     if n <= 2:
#         return 1
#     else:
#         return fibo(n-1)+fibo(n-2)
# print('斐波那契数列的第{}项为{}'.format(20,fibo(20)))

#匿名函数
#<函数名>=lambda <参数列表>:<表达式>
#使用匿名函数实现a+b+c
# sum = lambda a, b, c : a+b+c
# print(sum(1,2,3))
# 
# #编写lambda函数，参数为正方形的边长m，输出正方形的面积。
# fun = lambda m: m**2
# print(fun(5))